package com.yuw.oop.overridedemo;

public class TestDriver {

	public static void main(String[] args) {
		test04();
	}

	/**
	 * instanceof关键字
	 */
	private static void test04() {
		// 父类变量指向子类引用
		Person per0 = new Student();
		Student stu0 = (Student) per0;
		// 创建一个person类型的变量
		Teacher tea0 = new Teacher();
		System.out.println("per0是不是Person类型：" + (per0 instanceof Person));

		boolean isOk1 = stu0 instanceof Person;
		System.out.println("stu0是不是Person类型：" + isOk1);

		System.out.println("per0是不是Student类型：" + (per0 instanceof Student));

		System.out.println("per0是不是Object类型：" + (per0 instanceof Object));
		System.out.println("stu0是不是Object类型：" + (stu0 instanceof Object));

		System.out.println("tea0是不是Person类型：" + (tea0 instanceof Person));
		// System.out.println("tea0是不是Student类型：" + (tea0 instanceof Student));
		
		String  str = "小明";
		if(str.equals(per0)){
			System.out.println("俺就是小明。。。");
		}
	}

	/**
	 * 多态：向下溯型
	 */
	private static void test03() {
		// 父类变量指向子类引用
		Person per0 = new Student();
		// 不能调用子类新扩展的行为方法
		// per0.doStuding();
		// 将父类类型重新转换为子类类型
		Student stu0 = (Student) per0; // 向下溯型【强制转换】
		stu0.doStuding();

		////////////////////
		Person per1 = new Person();
		Student stu1 = (Student) per1;
		// 调用student类的行为方法
		stu1.doStuding();
	}

	/**
	 * 多态：父类类型变量指向子类类型
	 */
	private static void test02() {
		// 创建子类Student的实例对象
		Student stu0 = new Student();
		// 父类变量指向子类引用
		Person per0 = new Student();
		// 调用多态变量的行为方法
		per0.doEating();
		// 不能调用子类新扩展的行为方法
		// per0.doStuding();

	}

	/**
	 * 多态：方法的重写
	 */
	private static void test01() {
		// 创建子类Student的实例对象
		Student stu0 = new Student();
		// 调用子类的行为方法
		stu0.doEating();
	}
}
